"""
队列（Queue）是一种基本的数据结构，它遵循先进先出（FIFO, First In First Out）的原则。也就是说，最先添加到队列的元素会被最先取出。队列常见的操作包括入队（enqueue，即添加元素到队列尾部）和出队（dequeue，即从队列头部移除元素）。队列在计算机科学中有着广泛的应用，如操作系统的任务调度、打印任务管理、网络请求处理等。

接下来我们用 Python 来实现一个队列。该队列的类将包含以下操作：
入队(enqueue)
出队(dequeue)
获取队列的头部元素(peek)
判断队列是否为空(is_empty)
获取队列的长度(size)。
"""
class Queue:
    def __init__(self):
        self.items = []

    def is_empty(self):
        return not bool(self.items)

    def enqueue(self, data):
        self.items.append(data)

    def dequeue(self):
        return self.items.pop(0)

    def peek(self):
        return self.items[0]

    def size(self):
        return len(self.items)
    
    def print(self):
        print('-rear->', end=' ')
        for item in reversed(self.items):
            print(item, end=' ')
        print('-front->')


if __name__ == '__main__':
    q = Queue()
    print(q.is_empty())  # True

    q.enqueue(1)
    q.enqueue(2)
    print(q.size())  # 2

    q.print() # -rear-> 2 1 -front->

    print(q.peek())  # 1

    print(q.dequeue())  # 1

    print(q.size())  # 1

    q.print() # -rear-> 2 -front->
